/**
 * 当引用数据类型作为方法的形参，修改形参的值，会修改传入的参数的内容。
 * <p>
 * 如果参数是基本数据类型，此时实参赋给形参的是实参真实存储的数据值。
 * 如果参数是引用数据类型，此时实参赋给形参的是实参存储数据的地址值。
 */


import java.util.Arrays;

public class FormalParemeterTransmission {
    public static void main(String[] args) {
        int[] arr = new int[]{2, 3, 5, 6};
        System.out.println(Arrays.toString(arr));
        new Swap().swap(arr, 1, 2); //不定义新对象，直接调用Swap里面的方法。可直接交换
        System.out.println(Arrays.toString(arr));

        Data data = new Data(1, 2);
        data.getNum();
        new Swap().swap(data);
        data.getNum();

    }
}

class Data {
    public int num1;
    public int num2;

    Data(int i, int j) {  //构造器
        num1 = i;
        num2 = j;
    }

    public void getNum() {
        System.out.println("num1:" + num1 + " num2:" + num2);
    }

}

class Swap {
    public void swap(Data data) {
        int temp = data.num1;
        data.num1 = data.num2;
        data.num2 = temp;
    }

    public void swap(int[] arr, int index1, int index2) {
        int temp = arr[index1];
        arr[index1] = arr[index2];
        arr[index2] = temp;
    }
}



